#ifndef QLSPLUGINSMANAGERTABLEWIDGET_H
#define QLSPLUGINSMANAGERTABLEWIDGET_H

#include <QList>
#include <QPoint>

#include <QWidget>

#include "dllQLsPluginsManagerAppfwk_global.h"
#include "qlspluginwidget.h"

/* 插件位置信息 */
class PluginInfoPos
{
public:
	PluginInfo m_pluginInfo;			/* 插件信息 */
	QPoint m_pos;						/* 位置 */

	PluginInfoPos();
	PluginInfoPos(PluginInfo pluginInfo, QPoint pos);
	bool operator ==(const PluginInfoPos &other);
};

namespace Ui {
class DLLQLSPLUGINSMANAGERAPPFWK_EXPORT QLsPluginsManagerTableWidget;
}

class DLLQLSPLUGINSMANAGERAPPFWK_EXPORT QLsPluginsManagerTableWidget : public QWidget
{
	Q_OBJECT

public:
	explicit QLsPluginsManagerTableWidget(QWidget *parent = nullptr);
	~QLsPluginsManagerTableWidget();

	/* 添加插件界面 */
	void AddPluginWidget(const PluginInfo &pluginInfo);
	/* 删除插件界面 */
	void DeletePluginWidget(const PluginInfo &pluginInfo);

	/* 是否显示插件管理器界面 */
	bool isShowPluginsManagerWidget() const;
	void setIsShowPluginsManagerWidget(bool isShowPluginsManagerWidget);

signals:
	/* 转发所有插件的加载信号 */
	void sigLoad(PluginInfo&);

public slots:
	/* 加载结果的槽函数 */
	void slotLoadRes(PluginInfo &pluginInfo);

private slots:
	/* 转发所有插件的加载信号的槽函数 */
	void slotLoad(PluginInfo &pluginInfo);

private:
	/* 获取当前表格靠前的空格(未添加或被删除导致的空格)位置 */
	QPoint GetSpacePos();
	/* 是否已存在该插件 */
	bool IsAlreadyExisted(const PluginInfo &pluginInfo);

private:
	Ui::QLsPluginsManagerTableWidget *ui;

	bool m_isShowPluginsManagerWidget;					/* 是否显示插件管理器界面 */

	QList<PluginInfoPos> m_pluginInfoPosList;			/* 插件数据列表 */
};

#endif // QLSPLUGINSMANAGERTABLEWIDGET_H
